﻿using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using 餐饮_企划.Models;

namespace 餐饮_企划.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        RecipeDB recipeSercice;     //扩大对象的作用域

        public HomeController(ILogger<HomeController> logger, RecipeDB recipe)  //在控制器的构造函数中，引入对象--依赖注入
        {
            _logger = logger;

            recipeSercice = recipe;    //扩大对象的作用域
             
        }


        public IActionResult Login()  // 如果不写处理方式，默认是get请求  [HttpPost]
        {
            return View();
        }

        /*                                登录界面                         */
        [HttpPost]
        public IActionResult Login(string name,string password)  // 如果不写处理方式，默认是get请求,此时需要一个post请求的，处理交过来的表单信息
        {
            if(name == "admin" && password == "123456")
            {
                ViewBag.Result = "成功！"; // 向界面传值，ViewBag是后台想前端传递数据的袋子，变量随便命名如“Result”
                return RedirectToAction("Index");   // 链接重定向
            }
            else
            {
                ViewBag.Result = "用户名或密码错误！";
            }
            return View();
        }

        /*                            网站首页            */
        public IActionResult Index()  //   首页  如果不写处理方式，默认是get请求  [HttpPost]
        {
            return View();
        }



        /*                       转到添加页面                       */
        public IActionResult Add()
        {
            return View();         //  默认去Views文件夹中找与控制器名称相同的子文件夹，然后再找与方法名称相同的界面
            //return View("Add");  // 路径不变，界面名称不在默认Action名称相同的名字   
            //return View("~/Views/MyViews/index.cshtml")    // 路径改变，使用绝对路径的  写界面的拓展名
            //return View("../../Views/MyViews/index")   // 相对位置，从控制器文件为基准去找界面     不写界面的拓展名
        }



        /*                        添加菜单信息                   */
        [HttpPost]
        public IActionResult Add(Recipe recipe)  // 类 封装
        {
            //将封装好的Recipe传递给Models，RecipeService类中的Add_Menu()方法


            int result = recipeSercice.Add_Menu(recipe);
            // 接受M的反馈，将反馈结果传递给界面
            if (result > 0)
            {
                ViewBag.Message = "添加成功！";
            }
            else
            {
                ViewBag.Message = "添加失败！";
            }

            //把菜单(Recipe.cs)存储一下
            return View();
        }




        /*                         先按ID查询菜单                     */
        public IActionResult Edit(int id=1)  // id代表用户点击的那条记录的主键，这里就是菜谱的编号
        {
            // 1.向M要值
            Recipe recipe = recipeSercice.Get_Menu_id(id);
            // 2.C把值传给V,V来展示
            ViewBag.R = recipe;
            return View();
        }


        /*                       在按ID修改菜单信息                */
        [HttpPost]
        public IActionResult Edit(Recipe recipe)  // 修改菜单  这里就是菜谱的编号
        {
            //将封装好的Recipe传递给Models，RecipeService类中的Edit_Menu()方法

            int result = recipeSercice.Edit_Menu(recipe);
            // 接受M的反馈，将反馈结果传递给界面
            if (result > 0)
            {
                ViewBag.Message = "修改成功！";
            }
            else
            {
                ViewBag.Message = "修改失败！";
            }
            ViewBag.R = recipe;
            //把菜单(Recipe.cs)存储一下
            return RedirectToAction("Menu");
        }


        // 显示所有的菜单信息
        public IActionResult Menu() 
        {
            // 1.向M要值
            List<Recipe> list_Recipe  = recipeSercice.Get_all_Menu();
            // 2.C把值传给V,V来展示
            ViewBag.Recipes = list_Recipe;
            return View();
        }



        public IActionResult Detail(int id)   // 显示菜单详情
        {
            // 1.向M要值
            Recipe recipe = recipeSercice.Get_Menu_id(id);
            // 2.C把值传给V,V来展示
            ViewBag.R = recipe;
            return View();  // 创建与Detail控制器相同的页面
        }



        /*                         先按ID删除菜单                     */
        public IActionResult Delete(int id)  // id代表用户点击的那条记录的主键，这里就是菜谱的编号
        {
            // 1.输入要删除的Recipe对象元素的id
            bool result = recipeSercice.Delete(id);
            // 2.C把值传给V,V来展示
            if (result)
            {
                ViewBag.Message = "删除成功！";
            }
            else
            {
                ViewBag.Message = "删除失败！";
            }
            return RedirectToAction("Menu");   // 转到Menu这个Action上
        }


        public IActionResult Select_name(string cai_name)   // 根据菜品名称搜索菜谱 并返回  菜谱列表
        {
            // 1.向M要值
            List<Recipe> list_Recipe = recipeSercice.Search(cai_name);
            // 2.C把值传给V,V来展示
            ViewBag.Recipes = list_Recipe;
            return View("~/Views/Home/Menu.cshtml");
        }


        /*Json信息的使用与传递*/
        public JsonResult Get()
        {
            return Json(new Recipe { Id = 5, Cai_name = "辣子鸡", Cai_xi = "鲁菜"});
        }
    }
}
